A graphics engine, graphics processing unit (GPU), or visual processing unit (VPU), is a specialized electronic circuit designed to rapidly manipulate and alter memory to accelerate the creation of images in a frame buffer typically intended for output to a display. GPUs may be found in embedded systems, mobile phones, tablets, notebook computers, high performance computation (HPC) servers, and game consoles. In addition to manipulating computer graphics, a highly parallel architecture also enables a GPU to more generally perform processing of large blocks of video stream and image data in parallel.
Video cameras are now ubiquitous in mobile electronic media devices. Video cameras are available in wearable form factors (e.g., video capture earpieces, video capture headsets, video capture eyeglasses, etc.), as well as embedded within smartphones, tablet computers, and notebook computers, etc. In many circumstances, these devices capture image sequences (i.e., video) under non-ideal conditions and the acquisition equipment is highly constrained by the mobile form factor. For example, in situations such as filming from a moving vehicle or using an unsteady hand, many videos show a high degree of undesirable motion instability or motion jitter (i.e., shakiness). Even videos acquired in less severe conditions often show undesirable shaking.
Video stabilization aims at removing undesired shaky motion from videos. Although some capture devices provide mechanical image stabilization, image processing techniques are often employed in the alternative, or in addition to, mechanical stabilization. Such image processing techniques typically involve calculating image motion and performing some form of frame warping to counter the calculated image motion. Stabilization via image processing can however severely degrade the visual quality of an input video, particularly where the input video does not suffer significant motion instability, or where the stabilization algorithm relies on assumptions ill-suited to the input video.
Image processing-based motion stabilization might be advantageously enabled only as needed based on a motion sensor, such as gyroscope and/or accelerometer. However, such a front-end solution can be readily applied only by the capture device, which often may not have the needed processing resources and/or secondary sensor capability.